100 ! IN THE DARK
110 GOSUB 1110
120 CALL SAMS(2,B,3,B+1) :: CALL MOVES("RV",768,W,0) :: N=INT(X/256) :: O=X-(N*256) :: CALL LOAD(-12286,N,O)
130 CALL SPRITE(#1,128,5,89,C*8-7)
140 ! KEYS IN Z$=ARROWS OR Ss Dd Xx Ee SPACE ENTER AID Pp
150 Z$=CHR$(8)&"Ss"&CHR$(9)&"Dd"&CHR$(10)&"Xx"&CHR$(11)&"Ee"&CHR$(32)&CHR$(13)&CHR$(1)&"Pp"
160 ! MAIN LOOP
170 CALL SOUND(50,-6,15)
180 U=W+351+C :: CALL LOAD(U,225)! FOOTSTEPS
190 CALL LOCATE(#1,90,C*8-7) :: CALL MOVES("RV",768,W,0)! SHOW ME
200 ! ARROWS OR L,R,D,U,SPACE,ENTER,FCTN7,P,p
210 CALL ONKEY(Z$,0,K,Z)GOTO 370,370,370,410,410,410,450,450,450,510,510,510,580,690,810,1590,1590
220 ! ENEMY MOVEMENTS
230 IF F+T<9 THEN 210
240 CALL PEEK(-12276,G) :: IF G=218 THEN E=I*5 :: CALL LOAD(-12276,0)
250 IF M<>B THEN 280
260 IF E=0 THEN 270 ELSE E=E-1 :: GOTO 210
270 IF U-X<256 AND M=B THEN CALL SOUND(-1,2500,2)
280 CALL SAMS(2,M,3,M+1) :: CALL EXECUTE(-12256)
290 CALL PEEK(-12286,G,H) :: X=(G*256)+H :: IF U=X AND B=M THEN 750! MISSION FAILED
300 IF(U<X AND M>B)OR(X<U AND B>M)THEN M=B :: CALL LOAD(-12286,33,129)
310 IF X<8227 AND M=0 THEN 360
320 IF X>16348 AND M=42 THEN 360
330 IF X<8227 THEN M=M-1 :: X=X+4096
340 IF X>16348 THEN M=M+1 :: X=X-4096 ELSE 360
350 N=INT(X/256) :: O=X-(N*256) :: CALL SAMS(M,M+1) :: CALL LOAD(-12286,N,O)
360 CALL SAMS(2,B,3,B+1) :: GOTO 190
370 ! MOVE LEFT
380 CALL GCHAR(12,C-1,G) :: IF G=143 OR G=119 OR G=111 OR G=103 THEN 640
390 IF G=122 THEN 760
400 C=C-1 :: GOTO 160
410 ! MOVE RIGHT
420 CALL GCHAR(12,C+1,G) :: IF G=143 OR G=119 OR G=111 OR G=103 THEN 640
430 IF G=122 THEN 760
440 C=C+1 :: GOTO 160
450 ! MOVE DOWN
460 IF W=15488 AND B=42 THEN 1020
470 CALL GCHAR(13,C,G) :: IF G=143 OR G=119 OR G=111 OR G=103 THEN 640
480 IF G=122 THEN 760
490 IF W>=15615 THEN B=B+1 :: W=W-4096 :: GOTO 570
500 W=W+32 :: GOTO 160
510 ! MOVE UP
520 IF W=8192 AND B=0 THEN CALL HCHAR(1,1,119,480) :: CALL MOVES("VR",768,0,W) :: GOTO 640
530 CALL GCHAR(11,C,G) :: IF G=143 OR G=119 OR G=111 OR G=103 THEN 640
540 IF G=122 THEN 760
550 IF W=8192 THEN B=B-1 :: W=W+4096 :: GOTO 570
560 W=W-32 :: GOTO 160
570 CALL SAMS(2,B,3,B+1) :: GOTO 160
580 ! FEEL AROUND ME
590 CALL CHAR(128,"0000187E7E242466")
600 N=INT(U/256) :: O=U-(N*256) :: CALL LOAD(-12282,N,O)
610 CALL EXECUTE(-12034)
620 CALL PEEK(-12288,N,O) :: F=F+N :: S=S+(I*N) :: T=T+O
630 FOR Z=1 TO N+O :: CALL SOUND(1,-5,3) :: NEXT Z :: CALL CHAR(128,"187E5A5A3C242424") :: GOTO 190
640 CALL SOUND(99,200,20,-7,0) :: GOTO 160
650 ! SHOW SCORE
660 CALL MOVES("VR",768,0,W) :: CALL CLEAR :: CALL HPUT(10,1,"TRAPS=",10,7,T,10,13,"SCANS=",10,19,S,10,24,"FOOD=",10,29,F)
670 CALL HPUT(14,1,"YOU ARE INJURED "&STR$(D)&" TIMES!") :: GOTO 1570
680 ! SHOW AREA SCAN
690 IF S THEN 700 ELSE GOSUB 660 :: GOTO 160
700 CALL CLEAR :: CALL SOUND(10,2E4,6,770,5,440,6,-7,3) :: U=W+352 :: K=U+32 :: N=352 :: O=384 :: FOR Z=1 TO 12
710 CALL MOVES("RV",32,U,N,"RV",32,K,O) :: U=U-32 :: K=K+32 :: N=N-32 :: O=O+32 :: NEXT Z
720 CALL COLOR(11,16,1,12,7,1) :: FOR Z=1 TO 100 :: CALL KEY(0,K,J) :: IF K=13 THEN 740
730 NEXT Z :: GOTO 700
740 CALL COLOR(11,2,1,12,2,1) :: S=S-1 :: GOTO 160
750 ! GAME OVER FAILED
760 FOR Z=1 TO 24 STEP 4 :: CALL SOUND(100,-7,Z) :: NEXT Z
770 D=D+1 :: IF I=0 THEN I=1 ELSE I=I-1 :: E=I
780 GOSUB 660 :: IF U=X AND M=B THEN CALL HPUT(22,5,"REPAIR BOT CAUGHT YOU!",20,12,"YOU DIE!") :: END
790 IF D=25 THEN CALL HPUT(22,2,"YOUR INJURIES ARE TO GREAT...",20,12,"YOU DIE!") :: END
800 GOTO 120
810 CALL CLEAR :: CALL HPUT(1,10,"IN THE DARK",12,2,"SUGGEST YOU SWITCH DISKS NOW!",24,9,"PRESS SPACE KEY") :: CALL KEY(" ",0,K,S)
820 OPEN #1:P$&"SCORE",OUTPUT
830 PRINT #1:W! 8K ADDRESS
840 PRINT #1:T! TRAPS
850 PRINT #1:S! SCANS
860 PRINT #1:F! FOOD
870 PRINT #1:D! DEAD/FAILED
880 PRINT #1:B! BANKS 4K
890 PRINT #1:I! INCREMENTS
900 PRINT #1:C! COLUMN ME
910 PRINT #1:X! 8K ADDRESS
920 PRINT #1:M! BANKS 4K
930 CLOSE #1
940 FOR BANK=0 TO 84 STEP 2
950 CALL SAMS(2,BANK+16,3,BANK+17)
960 CALL PSAVE(2,P$&"2ITDT"&STR$(PAGE),3,P$&"3ITDT"&STR$(PAGE))
970 PAGE=PAGE+1
980 CALL MOVES("RV",768,8192,0)
990 NEXT BANK
1000 PRINT "GAME SAVED!" :: END
1010 CALL SOUND(99,200,20,-5,0) :: RETURN
1020 ! WE HAVE A WINNER!
1030 CALL CLEAR :: CALL HPUT(12,5,"YOU ARE FREE AT LAST!!",24,7,"< PRESS ANY KEY >")
1040 DIM Y(6) :: RESTORE 1050
1050 DATA 247,262,294,330,349,392,440
1060 FOR Z=0 TO 6 :: READ Y(Z) :: NEXT Z
1070 Z=INT(RND*7) :: N=Z :: O=Z :: GOTO 1090
1080 O=N :: N=Z :: Z=INT(RND*7)
1090 CALL SOUND(-200,Y(Z),0,Y(N),9,Y(O),19)
1100 CALL KEY(0,K,G) :: IF G=0 THEN 1080 ELSE GOSUB 660 :: END
1110 ! TITLE SCREEN
1120 CALL CLEAR :: CALL COLOR(ALL,16,1) :: CALL SCREEN(2) :: RESTORE 1130
1130 DATA 73,78,32,84,72,69,32,68,65,82,75,32
1140 FOR Z=1 TO 12 :: READ K :: CALL SPRITE(#Z,K,15,Z*Z,Z*21) :: NEXT Z :: CALL MAGNIFY(2)
1150 CALL HPUT(12,15,"BY",18,8,"RICH GILBERTSON") :: GOSUB 1570
1160 FOR Z=9 TO 12 :: CALL COLOR(Z,2,1) :: NEXT Z
1180 CALL CHAR(111,"00003C3C3C000000") :: CALL COLOR(10,8,1)
1190 CALL CHAR(119,"FFFFFFFFFFFFFFFF",143,"FFFFFFFFFFFFFFFF") :: CALL CHAR(122,"00005A5A5A5A0000") :: CALL COLOR(14,15,1)
1200 CALL CHAR(103,"007F7F7F7F7F7F00") :: CALL COLOR(9,12,1)
1210 ! LOADER FOR MAP
1220 CALL CLEAR :: CALL HPUT(17,4,"WHERE IS THE MAP?")
1230 CALL HPUT(20,3,"EXAMPLE: 1 OR DSK.VOLNAME.",23,3,"DISK # OR DEVICE PATH:") :: PRINT :: INPUT D$
1240 IF LEN(D$)=1 THEN P$="DSK"&D$&"." ELSE P$=D$
1250 PRINT "LOADING..."
1260 FOR BANK=0 TO 84 STEP 2
1270 CALL SAMS(2,BANK+16,3,BANK+17)
1280 CALL PLOAD(2,P$&"2ITDT"&STR$(BANK),3,P$&"3ITDT"&STR$(BANK+1))
1290 PAGE=PAGE+1 :: CALL MOVES("RV",768,8192,0) :: NEXT BANK
1300 PRINT "LOADING ASSEMBLY ROUTINES!" :: GOSUB 1610
1310 ! LOAD OLD GAME
1320 OPEN #1:P$&"SCORE",INPUT
1330 INPUT #1:W! 8K ADDRESS (ME)
1340 INPUT #1:T! TRAPS
1350 INPUT #1:S! SCANS
1360 INPUT #1:F! FOOD
1370 INPUT #1:D! DEAD/FAILED
1380 INPUT #1:B! BANKS 4K (ME)
1390 INPUT #1:I! INCREMENTS
1400 INPUT #1:C! COLUMN (ME)
1410 INPUT #1:X! 8K ADDRESS (ENEMY)
1420 INPUT #1:M! BANKS 4K (ENEMY)
1430 CLOSE #1 :: E=I
1440 CALL CLEAR :: CALL HPUT(24,2,"DO YOU WANT INSTRUCTIONS? Y/N") :: CALL KEY("YyNn",0,K,Z) :: CALL CLEAR
1450 ! INSTRUCTIONS
1460 CALL MAGNIFY(1) :: CALL DELSPRITE(ALL) :: IF K=78 OR K=110 THEN RETURN
1470 CALL HPUT(1,10,"IN THE DARK",3,1,"YOU HAVE BEEN CAPTURED AND ARE  NOW A TEST TEST SUBJECT.")
1480 CALL HPUT(5,1,"YOU HAVE A TOOL TO DISARM TRAPS.BUT YOU MUST GET ON HANDS AND",7,1,"KNEES TO FEEL THEM IN THE DARK.")
1490 CALL HPUT(9,1,"SPACE BAR TO FEEL AROUND YOU.   g IS A DISARMED TRAP.",11,1,CHR$(143)&" ARE WALLS FOUND.")
1500 CALL HPUT(12,1,"o IS FOOD AND SCAN CHIPS.",14,1,"ENTER KEY TO TURN ON SCAN CHIP.")
1510 CALL HPUT(16,1,"FREEDOM IS END OF THE TUNNEL!",18,1,"DO NOT TOUCH THE REPIAR BOT!",20,4,"YOU WILL DIE INSTANTLY!")
1520 CALL HPUT(22,1,"DISARMED TRAPS SLOWS REPAIR BOT!") :: GOSUB 1570
1530 CALL CLEAR :: CALL HPUT(1,10,"IN THE DARK",4,1,"(FNCT 7) SAVES THE GAME PROGRESS",6,1,"ARROWS OR ESDX KEYS ARE MOVEMENT")
1540 CALL HPUT(8,1,"SPACE BAR FEELS AROUND YOU",10,1,"ENTER IS SCAN CHIP (FULL SCREEN)",12,1,"P IS THE PAUSE KEY")
1550 CALL HPUT(14,1,"BY THE WAY THE REPAIR BOT MAKES A SOUND WHEN IT GETS CLOSE.")
1560 CALL HPUT(17,1,"THIS GAME USES 336K OF SAMS     MEMORY IN 43 FILES.",20,1,"SEE IF YOU CAN COMPLETE THE GAMEWITHOUT A SINGLE INJURY.")
1570 CALL HPUT(24,8,"<PRESS ANY KEY>") :: CALL KEY("",5,K,Z) :: RETURN
1580 FOR Z=1 TO 24 STEP 4 :: CALL SOUND(100,110*Z,30-Z,44000/Z,Z) :: NEXT Z :: RETURN
1590 ! PAUSE KEY
1600 CALL CLEAR :: CALL HPUT(10,13,"PAUSED!") :: GOSUB 1570 :: GOTO 160
1610 ! EXECUTE ASSEMBLY
1620 CALL LOAD(-12288,0) :: CALL MOVES("RR",406,-12288,-12287)
1630 CALL LOAD(-12256,208,0,208,36,2,6,199,0,2,7,0,32,2,8,1,0,192,129,96,135,145,146,19,27)
1640 CALL LOAD(-12232,6,2,145,146,19,24,160,135,145,146,19,21,160,135,145,146,19,18,5,130,145,146)
1650 CALL LOAD(-12210,19,15,5,130,145,146,19,12,96,135,145,146,19,9,96,135,145,146,19,6)
1660 CALL LOAD(-12190,2,134,207,0,19,13,2,6,207,0,16,225,2,134,199,0,22,4,2,6,218,0,212,134)
1670 CALL LOAD(-12166,3,128,2,6,128,0,212,134,2,6,225,0,192,129,6,2,145,146,19,42,160,135)
1680 CALL LOAD(-12144,145,146,19,39,5,130,145,146,19,36,5,130,145,146,19,33,96,135,145,146)
1690 CALL LOAD(-12124,19,30,96,135,145,146,19,27,6,2,145,146,19,24,6,2,145,146,19,21,177,136)
1700 CALL LOAD(-12102,2,134,228,0,19,1,16,226,2,6,225,0,2,1,32,34,5,129,2,129,63,221,22,5,177,136)
1710 CALL LOAD(-12076,2,134,228,0,19,17,16,247,145,145,19,209,16,244,2,6,225,0,145,145,19,6)
1720 CALL LOAD(-12054,177,136,2,134,227,0,22,250,2,6,127,0,177,136,212,70,192,66,3,128)
1730 CALL LOAD(-12034,208,0,209,2,4,192,2,7,0,32,193,3,97,7,5,132,2,6,218,0,6,160,209,52,128,132)
1740 CALL LOAD(-12008,22,250,2,6,215,0,6,160,209,52,128,132,22,250,2,6,207,0,6,160,209,52)
1750 CALL LOAD(-11986,128,132,22,250,3,128,192,131,96,135,145,146,19,22,6,2,145,146,19,19)
1760 CALL LOAD(-11966,160,135,145,146,19,16,160,135,145,146,19,13,5,130,145,146,19,10,5,130)
1770 CALL LOAD(-11946,145,146,19,7,96,135,145,146,19,4,96,135,145,146,19,1,4,91,2,134,218,0)
1780 CALL LOAD(-11924,22,4,2,8,199,0,5,128,16,13,2,134,215,0,22,3,2,8,239,0,16,7)
1790 CALL LOAD(-11902,2,134,207,0,22,5,2,8,128,0,2,32,1,0,212,136,4,91)
1800 RETURN
